/**
 * 主框架事件处理类
 */
function MainHandler() {
};
MainHandler.instance = new MainHandler();

// 主面板
MainHandler.mainLayout = {};

// 当前功能节点
MainHandler.currentFunNode = {};
// 系统路径
MainHandler.basePath = "/";

MainHandler.leftFunId = null;
/**
 * 初始化数据,界面
 * 
 * @param funs
 * @return
 */
MainHandler.init = function(funs) {
	MainHandler.mainLayout = mini.get("mainLayout");
	MainHandler.loadMainMenu(funs);
	MainHandler.basePath = __root;
};

/**
 * 加载 用户 主菜单
 * 
 * @return
 */
MainHandler.loadMainMenu = function(funs) {
	var xmMainMenu = mini.get("xmMainMenu");
	var mfuns = [];
	for (i = 0; i < funs.length; i++) {
		var fn = funs[i];
		var fo = {
			text : fn.name,
			iconCls : fn.funIcon
		};
		var fo = $.extend(fo, fn); // 复制节点
		fo.children = null; // 强制不显示下级菜单
		mfuns.add(fo);
	}
	xmMainMenu.setItems(mfuns);
};

/**
 * 加载左侧功能菜单
 * 
 * @return
 */
MainHandler.loadLeftMenu = function(funId) {
	var funs = ClientData.userFunNodeData;
	var xmMenu = mini.get("xmLeftMenu");
	var mfuns = [];
	
	for (i = 0; i < funs.length; i++) {
		var fn = funs[i];
		
		if (fn.funId == funId) {
			if (fn.name == "首页") {
				var menuTabs = mini.get("menu-tabs-div");
				menuTabs.activeTab(menuTabs.getTab(0));
				return;
			}
			
			if (!MainHandler.mainLayout.getRegion("west").visible) {
				MainHandler.mainLayout.showRegion("west");
			}

			MainHandler.mainLayout.getRegion("west").title = fn.name;
			MainHandler.mainLayout.updateRegion("west", "title");

			var pfs = MiniuiTools.findTreeNode(funId, parent.ClientData.userFunNodeData, null);
			if (pfs && pfs.children) {
				for ( var j = 0; j < pfs.children.length; j++) {
					var obj = pfs.children[j];
					var cp	= $.extend({},obj);				// 复制节点
					if(cp.funType>=1) cp.children	= [];	// 如果不是功能模块类型，将强制不显示下级菜单
					mfuns.push(cp);
				}
			}
		}
	}
	xmMenu.loadData(mfuns);
};

/**
 * 主菜单点击事件处理
 * 
 * @param e
 * @return
 */
MainHandler.onMenuClick = function(e) {
	var item = e.item;
	var funId = item.funId;
	// 此处字节从数据库中将功能函数取出并执行，执行前需要声明 funId变量；可兼容EDOJS数据库
	eval(item.func);
};

/**
 * 左侧菜单选中事件处理
 * 
 * @param e
 * @return
 */
MainHandler.onLeftMenuClick = function(e) {
	var node = e.node;
	var funId = node.funId;
	MainHandler.leftFunId = funId;
	if (!!node.className) {
		var tmp = node.className;
		var start = tmp.length > 11 ? tmp.substring(0, 11) : tmp;
		if ("javascript:" == start) {
			try {
				eval(node.className);
			} catch (e) {
				mini.alert("功能加载出错：" + e);
			}
		} else {
			// 此字段作为链接地址
			MainHandler.openMenuItemTab(funId, node.pfunId, node.name,
					node.remark, node.className, true);
		}
	} else if (!!node.func) {
		try {
			eval(node.func);
		} catch (e) {
			mini.alert("功能加载出错：" + e);
			// MainHandler.openMenuItemTab(funId,node.pfunId,node.name,node.func,true);
		}
	}
};

/**
 * 移出同级节点选显卡
 * 
 * @param {}
 *            menuTabs
 * @param {}
 *            id
 */
MainHandler.removeNodeTab = function(menuTabs, id) {
	if (!!id) {
		menuTabs.removeTab(id);
	}
}

/**
 * 创建并打开功能选项卡
 * 
 * @param id
 *            功能ID
 * @param pid
 *            父ID,如果存在则一个功能模块占用一个TAB，否则一个功能占据一个TAB
 * @param name
 *            功能名
 * @param parentName
 *            功能模块名
 * @param url
 *            链接地址
 * @param isClose
 *            是否显示关闭
 * @return
 */
MainHandler.openMenuItemTab_backup = function(id, pid, name, parentName, url,
		isClose) {
	if (!!pid)
		id = pid;
	var pName = "";
	var endkHao = "";
	if (parentName != null && parentName != "" && parentName.indexOf("==") > 0) {
		pName = parentName.split("==")[1] + "-[<font color='blue'>";
		endkHao = "</font>]";
	}

	var menuTabs = mini.get("menu-tabs-div");
	MainHandler.removeNodeTab(menuTabs, id);
	var tab = menuTabs.getTab(id);
	if (!tab) {
		tab = {};
		tab.name = id;
		tab.title = pName + name + endkHao;
		tab.showCloseButton = isClose ? true : false;
		tab.url = MainHandler.basePath + "/" + url;
		menuTabs.addTab(tab);
	}
	menuTabs.activeTab(tab);
}

/**
 * 创建并打开功能选项卡
 * 
 * @param id
 *            功能ID
 * @param pid
 *            父ID,如果存在则一个功能模块占用一个TAB，否则一个功能占据一个TAB
 * @param name
 *            功能名
 * @param parentName
 *            功能模块名
 * @param url
 *            链接地址
 * @param isClose
 *            是否显示关闭
 * @return
 */
MainHandler.openMenuItemTab = function(id, pid, name, parentName, url, isClose) {
	// if(!!pid) id = pid;
	var pName = "";
	var endkHao = "";
	if (parentName != null && parentName != "" && parentName.indexOf("==") > 0) {
		pName = parentName.split("==")[1] + "-[<font color='blue'>";
		endkHao = "</font>]";
	}

	var menuListTree = mini.get("xmLeftMenu");
	var menuTabs = mini.get("menu-tabs-div");

	var tab = menuTabs.getTab(id);
	if (!tab) {
		tab = MainHandler.findSiblingTreeNodeTab(menuTabs, menuListTree
						.getRootNode().children);
		if (!tab) {
			tab = {};
			menuTabs.addTab(tab);
		}
		menuTabs.updateTab(tab, {
					name : id,
					title : pName + name + endkHao,
					showCloseButton : isClose ? true : false,
					url : MainHandler.basePath + "/" + url
				});
		menuTabs.reloadTab(tab);
		// 加载tab及对应页面时不加以遮罩
		menuTabs.unmask();
	}
	menuTabs.activeTab(tab);
}

/**
 * 查找同级树节点并返回同级节点对象 tabIndex = menuTabs.tabs.indexOf(tab)；获得指定tab的索引
 * 
 * @param {}
 *            menuTabs
 * @param {}
 *            childNodes
 * @return {}
 */
MainHandler.findSiblingTreeNodeTab = function(menuTabs, childNodes) {
	if (childNodes != null && childNodes.length > 0) {
		for (var i = 0; i < childNodes.length; i++) {
			var tab = menuTabs.getTab(childNodes[i].funId);
			if (tab != null) {
				return tab;
			}
		}
	}
	return null;
}

/**
 * 为兼容EDOJS数据库而设置的类
 */
function MainFrame() {
};
MainFrame.instance = MainFrame;

/**
 * 打开指定模块的左侧菜单
 * @param {} page
 * @param {} funId
 * @param {} isRload
 */
MainFrame.openFunNode = function(page, funId, isRload) {
	MainHandler.loadLeftMenu(funId);
};